# 输出日志
import logging
from logging.handlers import RotatingFileHandler
import time
import os

def logger_config(log_path, logging_name):
    '''
    配置log
    :param log_path: 输出log路径
    :param logging_name: 记录中name，可随意
    :return:
    '''
    '''
    logger是日志对象，handler是流处理器，console是控制台输出（没有console也可以，将不会在控制台输出，会在日志文件中输出）
    '''
    # 获取logger对象,取名
    logger = logging.getLogger(logging_name)
    # 输出DEBUG及以上级别的信息，针对所有输出的第一层过滤
    logger.setLevel(level=logging.DEBUG)
    # 判断当前日志对象是否有处理器，没有才创建，避免重复创建
    if not logger.handlers:
        # 获取文件日志句柄并设置日志级别，第二层过滤
        handler = logging.FileHandler(log_path, encoding='UTF-8')
        handler.setLevel(logging.INFO)
        # 生成并设置文件日志格式
        formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
        handler.setFormatter(formatter)
        # console相当于控制台输出，handler文件输出。获取流句柄并设置日志级别，第二层过滤
        # console = logging.StreamHandler()
        # console.setLevel(logging.DEBUG)
        # 为logger对象添加句柄
        logger.addHandler(handler)
        # logger.addHandler(console)
    return logger


class Logger(object):
    def __init__(self, name=None):
        self.name = name
        # 创建一个记录器
        self.logger = logging.getLogger(self.name)
        self.logger.setLevel(logging.INFO)  # 设置日志级别为 INFO

        # 检查是否已经存在 handler，防止重复添加
        if not self.logger.handlers:
            formatter = logging.Formatter("%(levelname)s - %(filename)s:%(lineno)d %(asctime)s - %(name)s - %(message)s")

            # 创建屏幕-输出到控制台，设置输出等级
            streamHandler = logging.StreamHandler()
            streamHandler.setLevel(logging.DEBUG)
            streamHandler.setFormatter(formatter)
            self.logger.addHandler(streamHandler)

            # 创建log文件，设置输出等级
            PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  # 根目录
            time_now = time.strftime('%Y_%m%d_%H', time.localtime()) + '.log'
            log_path = os.path.join(PROJECT_ROOT, "edit_config_backend\logs", time_now)

            # 只创建一个 RotatingFileHandler
            fileHandler = RotatingFileHandler(log_path, maxBytes=1024 * 1024*10, backupCount=5, encoding='utf-8')
            fileHandler.setLevel(logging.DEBUG)
            fileHandler.setFormatter(formatter)
            self.logger.addHandler(fileHandler)

    def getLogger(self):
        return self.logger


logger = Logger().getLogger()
